const express = require("express");
const router = express.Router();
const getArticles = require("../router_handle/articles");
const multer = require("multer");
const path = require("path");

// 获取文章分类
router.post("/articles/cates", getArticles.getArticlesCates);

// 删除文章分类
router.post("/articles/delcate", getArticles.deleteCateById);

// 添加文章分类
// 配置文件上传
const storage = multer.diskStorage({
  // 配置文件上传的路径
  destination: (req, file, cb) => {
    // path.join(__dirname, "../public/uploads" ：表示当前目录的上一级目录的 public/uploads 目录
    // 注意：这里的路径是相对于服务器的根目录的，而不是相对于当前文件的路径的
    cb(null, path.join(__dirname, "../public/uploads"));
  },
  // 配置文件上传后的文件名
  filename: (req, file, cb) => {
    // 获取原始文件的扩展名
    const ext = path.extname(file.originalname).toLowerCase();
    // 生成文件名: 时间戳-随机数.扩展名
    const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
    // 允许的文件类型
    const allowedExt = [
      ".doc",
      ".docx",
      ".pdf",
      ".txt",
      ".jpg",
      ".png",
      ".jpeg",
      ".webp",
    ];

    if (!allowedExt.includes(ext)) {
      cb(new Error("不支持的文件类型"));
      return;
    }

    cb(null, uniqueSuffix + ext);
  },
});
// 创建 multer 实例
const upload = multer({ storage: storage });

// 单文件上传
const uploadSingle = (req, res, next) => {
  // 单文件上传
  upload.single("file")(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // Multer 内部错误
      return res.cc("文件上传错误：" + err.message);
    } else if (err) {
      // 自定义的扩展名错误
      return res.cc(err.message);
    }
    next(); // 没出错就继续往下走
  });
};

// 多文件上传
const uploadMultiple = (req, res, next) => {
  upload.array("files", 10)(req, res, function (err) {
    if (err instanceof multer.MulterError) {
      // Multer 内部错误
      return res.cc("文件上传错误：" + err.message);
    } else if (err) {
      // 自定义的扩展名错误
      return res.cc(err.message);
    }
    next(); // 没出错就继续往下走
  });
};

// 添加文章分类（使用 multer 中间件处理文件上传）
router.post("/articles/addcate", uploadSingle, getArticles.addCate);

// 下载文件
router.post("/articles/download", getArticles.downloadFile);
module.exports = router;
